home *** CD-ROM | disk | FTP | other *** search
/ C++ für Kids / C++ for kids.iso / SETUP / US / CBUILDER / DATA.Z / WINSOCK.PAS < prev    next >
Pascal/Delphi Source File  |  1997-02-13  |  25KB  |  696 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Runtime Library                          }
  5. {       Windows 32bit API Interface Unit                }
  6. {                                                       }
  7. {       Copyright (c) 1996 Borland International        }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit WinSock;
  12.  
  13. interface
  14.  
  15. uses Windows;
  16.  
  17. type
  18.   u_char = Char;
  19.   u_short = Word;
  20.   u_int = Integer;
  21.   u_long = Longint;
  22.  
  23. { The new type to be used in all
  24.   instances which refer to sockets. }
  25.   TSocket = u_int;
  26.  
  27. const
  28.   FD_SETSIZE     =   64;
  29.  
  30. type
  31.   PFDSet = ^TFDSet;
  32.   TFDSet = packed record
  33.     fd_count: u_int;
  34.     fd_array: array[0..FD_SETSIZE-1] of TSocket;
  35.   end;
  36.  
  37.   PTimeVal = ^TTimeVal;
  38.   TTimeVal = packed record
  39.     tv_sec: Longint;
  40.     tv_usec: Longint;
  41.   end;
  42.  
  43. const
  44.   IOCPARM_MASK = $7f;
  45.   IOC_VOID     = $20000000;
  46.   IOC_OUT      = $40000000;
  47.   IOC_IN       = $80000000;
  48.   IOC_INOUT    = (IOC_IN or IOC_OUT);
  49.  
  50.   FIONREAD     = IOC_OUT or { get # bytes to read }
  51.     ((Longint(SizeOf(Longint)) and IOCPARM_MASK) shl 16) or
  52.     (Longint(Byte('f')) shl 8) or 127;
  53.   FIONBIO      = IOC_IN or { set/clear non-blocking i/o }
  54.     ((Longint(SizeOf(Longint)) and IOCPARM_MASK) shl 16) or
  55.     (Longint(Byte('f')) shl 8) or 126;
  56.   FIOASYNC     = IOC_IN or { set/clear async i/o }
  57.     ((Longint(SizeOf(Longint)) and IOCPARM_MASK) shl 16) or
  58.     (Longint(Byte('f')) shl 8) or 125;
  59.  
  60. type
  61.   PHostEnt = ^THostEnt;
  62.   THostEnt = packed record
  63.     h_name: PChar;
  64.     h_aliases: ^PChar;
  65.     h_addrtype: Smallint;
  66.     h_length: Smallint;
  67.     h_addr_list: ^PChar;
  68.   end;
  69.  
  70.   PNetEnt = ^TNetEnt;
  71.   TNetEnt = packed record
  72.     n_name: PChar;
  73.     n_aliases: ^PChar;
  74.     n_addrtype: Smallint;
  75.     n_net: u_long;
  76.   end;
  77.  
  78.   PServEnt = ^TServEnt;
  79.   TServEnt = packed record
  80.     s_name: PChar;
  81.     s_aliases: ^PChar;
  82.     s_port: Smallint;
  83.     s_proto: PChar;
  84.   end;
  85.  
  86.   PProtoEnt = ^TProtoEnt;
  87.   TProtoEnt = packed record
  88.     p_name: PChar;
  89.     p_aliases: ^Pchar;
  90.     p_proto: Smallint;
  91.   end;
  92.  
  93. const
  94.  
  95. { Protocols }
  96.  
  97.   IPPROTO_IP     =   0;
  98.   IPPROTO_ICMP   =   1;
  99.   IPPROTO_GGP    =   2;
  100.   IPPROTO_TCP    =   6;
  101.   IPPROTO_PUP    =   12;
  102.   IPPROTO_UDP    =   17;
  103.   IPPROTO_IDP    =   22;
  104.   IPPROTO_ND     =   77;
  105.   
  106.   IPPROTO_RAW    =   255;
  107.   IPPROTO_MAX    =   256;
  108.  
  109. { Port/socket numbers: network standard functions}
  110.  
  111.   IPPORT_ECHO    =   7;
  112.   IPPORT_DISCARD =   9;
  113.   IPPORT_SYSTAT  =   11;
  114.   IPPORT_DAYTIME =   13;
  115.   IPPORT_NETSTAT =   15;
  116.   IPPORT_FTP     =   21;
  117.   IPPORT_TELNET  =   23;
  118.   IPPORT_SMTP    =   25;
  119.   IPPORT_TIMESERVER  =  37;
  120.   IPPORT_NAMESERVER  =  42;
  121.   IPPORT_WHOIS       =  43;
  122.   IPPORT_MTP         =  57;
  123.  
  124. { Port/socket numbers: host specific functions }
  125.  
  126.   IPPORT_TFTP        =  69;
  127.   IPPORT_RJE         =  77;
  128.   IPPORT_FINGER      =  79;
  129.   IPPORT_TTYLINK     =  87;
  130.   IPPORT_SUPDUP      =  95;
  131.  
  132. { UNIX TCP sockets }
  133.   
  134.   IPPORT_EXECSERVER  =  512;
  135.   IPPORT_LOGINSERVER =  513;
  136.   IPPORT_CMDSERVER   =  514;
  137.   IPPORT_EFSSERVER   =  520;
  138.   
  139. { UNIX UDP sockets }
  140.  
  141.   IPPORT_BIFFUDP     =  512;
  142.   IPPORT_WHOSERVER   =  513;
  143.   IPPORT_ROUTESERVER =  520;
  144.   
  145. { Ports < IPPORT_RESERVED are reserved for
  146.   privileged processes (e.g. root). }
  147.  
  148.   IPPORT_RESERVED    =  1024;
  149.   
  150. { Link numbers }
  151.  
  152.   IMPLINK_IP         =  155;
  153.   IMPLINK_LOWEXPER   =  156;
  154.   IMPLINK_HIGHEXPER  =  158;
  155.  
  156. type
  157.   SunB = packed record
  158.     s_b1, s_b2, s_b3, s_b4: u_char;
  159.   end;
  160.  
  161.   SunW = packed record
  162.     s_w1, s_w2: u_short;
  163.   end;
  164.  
  165.   PInAddr = ^TInAddr;
  166.   TInAddr = packed record
  167.     case integer of
  168.       0: (S_un_b: SunB);
  169.       1: (S_un_w: SunW);
  170.       2: (S_addr: u_long);
  171.   end;
  172.  
  173.   PSockAddrIn = ^TSockAddrIn;
  174.   TSockAddrIn = packed record
  175.     case Integer of
  176.       0: (sin_family: u_short;
  177.           sin_port: u_short;
  178.           sin_addr: TInAddr;
  179.           sin_zero: array[0..7] of Char);
  180.       1: (sa_family: u_short;
  181.           sa_data: array[0..13] of Char)
  182.   end;
  183.  
  184. const
  185.   INADDR_ANY       = $00000000;
  186.   INADDR_LOOPBACK  = $7F000001;
  187.   INADDR_BROADCAST = $FFFFFFFF;
  188.   INADDR_NONE      = $FFFFFFFF;
  189.  
  190. const
  191.   WSADESCRIPTION_LEN     =   256;
  192.   WSASYS_STATUS_LEN      =   128;
  193.  
  194. type
  195.   PWSAData = ^TWSAData;
  196.   TWSAData = packed record
  197.     wVersion: Word;
  198.     wHighVersion: Word;
  199.     szDescription: array[0..WSADESCRIPTION_LEN] of Char;
  200.     szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char;
  201.     iMaxSockets: Word;
  202.     iMaxUdpDg: Word;
  203.     lpVendorInfo: PChar;
  204.   end;
  205.  
  206.   PTransmitFileBuffers = ^TTransmitFileBuffers;
  207.   TTransmitFileBuffers = packed record
  208.       Head: Pointer;
  209.       HeadLength: DWORD;
  210.       Tail: Pointer;
  211.       TailLength: DWORD;
  212.   end;
  213.  
  214. const
  215.  
  216. { Options for use with [gs]etsockopt at the IP level. }
  217.  
  218.   IP_OPTIONS          = 1;
  219.   IP_MULTICAST_IF     = 2;           { set/get IP multicast interface   }
  220.   IP_MULTICAST_TTL    = 3;           { set/get IP multicast timetolive  }
  221.   IP_MULTICAST_LOOP   = 4;           { set/get IP multicast loopback    }
  222.   IP_ADD_MEMBERSHIP   = 5;           { add  an IP group membership      }
  223.   IP_DROP_MEMBERSHIP  = 6;           { drop an IP group membership      }
  224.  
  225.   IP_DEFAULT_MULTICAST_TTL   = 1;    { normally limit m'casts to 1 hop  }
  226.   IP_DEFAULT_MULTICAST_LOOP  = 1;    { normally hear sends if a member  }
  227.   IP_MAX_MEMBERSHIPS         = 20;   { per socket; must fit in one mbuf }
  228.  
  229. { This is used instead of -1, since the
  230.   TSocket type is unsigned.}
  231.  
  232.   INVALID_SOCKET        = TSocket(NOT(0));
  233.   SOCKET_ERROR            = -1;
  234.  
  235. { Types }
  236.  
  237.   SOCK_STREAM     = 1;               { stream socket }
  238.   SOCK_DGRAM      = 2;               { datagram socket }
  239.   SOCK_RAW        = 3;               { raw-protocol interface }
  240.   SOCK_RDM        = 4;               { reliably-delivered message }
  241.   SOCK_SEQPACKET  = 5;               { sequenced packet stream }
  242.  
  243. { Option flags per-socket. }
  244.  
  245.   SO_DEBUG        = $0001;          { turn on debugging info recording }
  246.   SO_ACCEPTCONN   = $0002;          { socket has had listen() }
  247.   SO_REUSEADDR    = $0004;          { allow local address reuse }
  248.   SO_KEEPALIVE    = $0008;          { keep connections alive }
  249.   SO_DONTROUTE    = $0010;          { just use interface addresses }
  250.   SO_BROADCAST    = $0020;          { permit sending of broadcast msgs }
  251.   SO_USELOOPBACK  = $0040;          { bypass hardware when possible }
  252.   SO_LINGER       = $0080;          { linger on close if data present }
  253.   SO_OOBINLINE    = $0100;          { leave received OOB data in line }
  254.  
  255.   SO_DONTLINGER  =   $ff7f;
  256.  
  257. { Additional options. }
  258.  
  259.   SO_SNDBUF       = $1001;          { send buffer size }
  260.   SO_RCVBUF       = $1002;          { receive buffer size }
  261.   SO_SNDLOWAT     = $1003;          { send low-water mark }
  262.   SO_RCVLOWAT     = $1004;          { receive low-water mark }
  263.   SO_SNDTIMEO     = $1005;          { send timeout }
  264.   SO_RCVTIMEO     = $1006;          { receive timeout }
  265.   SO_ERROR        = $1007;          { get error status and clear }
  266.   SO_TYPE         = $1008;          { get socket type }
  267.  
  268. { Options for connect and disconnect data and options.  Used only by
  269.   non-TCP/IP transports such as DECNet, OSI TP4, etc. }
  270.  
  271.   SO_CONNDATA     = $7000;
  272.   SO_CONNOPT      = $7001;
  273.   SO_DISCDATA     = $7002;
  274.   SO_DISCOPT      = $7003;
  275.   SO_CONNDATALEN  = $7004;
  276.   SO_CONNOPTLEN   = $7005;
  277.   SO_DISCDATALEN  = $7006;
  278.   SO_DISCOPTLEN   = $7007;
  279.  
  280. { Option for opening sockets for synchronous access. }
  281.  
  282.   SO_OPENTYPE     = $7008;
  283.  
  284.   SO_SYNCHRONOUS_ALERT    = $10;
  285.   SO_SYNCHRONOUS_NONALERT = $20;
  286.  
  287. { Other NT-specific options. }
  288.  
  289.   SO_MAXDG        = $7009;
  290.   SO_MAXPATHDG    = $700A;
  291.  
  292. { TCP options. }
  293.  
  294.   TCP_NODELAY     = $0001;
  295.   TCP_BSDURGENT   = $7000;
  296.  
  297. { Address families. }
  298.  
  299.   AF_UNSPEC       = 0;               { unspecified }
  300.   AF_UNIX         = 1;               { local to host (pipes, portals) }
  301.   AF_INET         = 2;               { internetwork: UDP, TCP, etc